"""
需求：从配置文件中读取配置信息
实现思路：
    1：创建配置解析器对象，读取配置文件
    2：加载mysql配置信息
    3：加载redis配置信息
"""

# 导包
import configparser

class Config:
    # 这里如果写相对路径的话，会报错，因为相对路径是相对于当前文件路径，而不是项目路径
    # def __init__(self, config_file="..\config.ini"):
    def __init__(self, config_file="F:\\code\\integrated_qa_system\\config.ini"):
        # 1：创建配置解析器对象，读取配置文件
        # 创建配置解析器对象
        self.config = configparser.ConfigParser()
        # 读取配置文件
        self.config.read(config_file,encoding='utf-8')

        # 2：加载mysql配置信息
        self.MYSQL_HOST = self.config.get("mysql", "host")
        self.MYSQL_PORT = self.config.getint("mysql", "port")
        self.MYSQL_USER = self.config.get("mysql", "user")
        self.MYSQL_PASSWORD = self.config.get("mysql", "password")
        self.MYSQL_DATABASE = self.config.get("mysql", "database")

        # 3：加载redis配置信息
        self.REDIS_HOST = self.config.get("redis", "host")
        self.REDIS_PORT = self.config.getint("redis", "port")
        self.REDIS_PASSWORD = self.config.get("redis", "password")
        self.REDIS_DB = self.config.get("redis", "db")

        # 4：加载日志配置信息
        self.LOG_FILE = self.config.get("logger", "log_file")

        # 5：加载 Milvus 配置
        # Milvus 主机地址
        self.MILVUS_HOST = self.config.get('milvus', 'host', fallback='localhost')
        # Milvus 端口
        self.MILVUS_PORT = self.config.get('milvus', 'port', fallback='19530')
        # Milvus 数据库名
        self.MILVUS_DATABASE_NAME = self.config.get('milvus', 'database_name', fallback='itcast')
        # Milvus 集合名
        self.MILVUS_COLLECTION_NAME = self.config.get('milvus', 'collection_name', fallback='edurag_final')

        # # 6：加载 LLM 配置
        # LLM 模型名
        self.LLM_MODEL = self.config.get('llm', 'model', fallback='qwen-plus')
        # DashScope API 密钥
        self.DASHSCOPE_API_KEY = self.config.get('llm', 'dashscope_api_key')
        # DashScope API 地址
        self.DASHSCOPE_BASE_URL = self.config.get('llm', 'dashscope_base_url',
                                                  fallback='https://dashscope.aliyuncs.com/compatible-mode/v1')

        # 7：加载检索参数
        # 父块大小
        self.PARENT_CHUNK_SIZE = self.config.getint('retrieval', 'parent_chunk_size', fallback=1200)
        # 子块大小
        self.CHILD_CHUNK_SIZE = self.config.getint('retrieval', 'child_chunk_size', fallback=300)
        # 块重叠大小
        self.CHUNK_OVERLAP = self.config.getint('retrieval', 'chunk_overlap', fallback=50)
        # 检索返回数量
        self.RETRIEVAL_K = self.config.getint('retrieval', 'retrieval_k', fallback=5)
        # 最终候选数量
        self.CANDIDATE_M = self.config.getint('retrieval', 'candidate_m', fallback=2)

        # 8：加载应用配置
        # 有效来源列表
        self.VALID_SOURCES = eval(
            self.config.get('app', 'valid_sources', fallback='["ai", "java", "test", "ops", "bigdata"]'))
        # 客服电话
        self.CUSTOMER_SERVICE_PHONE = self.config.get('app', 'customer_service_phone', fallback='12345678')

conf = Config()

def get_config():
    return conf

if __name__ == '__main__':
    print(conf.MYSQL_HOST)
    print(conf.MYSQL_PORT)
    print(conf.MYSQL_USER)
    print(conf.MYSQL_PASSWORD)
    print(conf.MYSQL_DATABASE)
